/* 
 * File:   MotorJuegoTest.cpp
 * Author: max
 *
 * Created on Nov 14, 2012, 8:07:53 PM
 */

#include <stdlib.h>
#include <iostream>
#include "MotorJuego.h"
#include "MotorJuegoFactory.h"
#include "Reloj.h"
#include "Partida.h"
#include "Escenario.h"
#include "Pajarito.h"
#include "Cerdito.h"
#include "Vector2D.h"
#include "ActoresConstantes.h"
#include "Caja.h"

using namespace TP::Matematica;
using namespace TP::Juego;
using namespace TP::Juego::Arena::Actores;
using namespace TP::Juego::Arena::Utilidades;
using namespace TP::Juego::Motorizacion;
using namespace TP::Juego::Motorizacion::Sincronizacion;

/*
 * Simple C++ Test Suite
 */

void test1() {
    std::cout << "MotorJuegoTest test 1" << std::endl;
    
    // Configuro un escenario de prueba.
    
    Pajarito* miPajarito = new Pajarito ("pepe");
    
    // En principio hay un pajaro en la posicion (0,0) y se tiene que desplazar a la posicion (5,5).
    Escenario miEscenario (20, 20, "RUTA_IMAGEN");
    
    Posicion* posicion = new Posicion (0,0);
    Vector2D* velocidad = new Vector2D (1,1);
    Vector2D* aceleracion = new Vector2D (0,0);

    miEscenario.addActor (miPajarito, posicion, velocidad, aceleracion);
    
    // Instancio la partida a patir del escenario configurado.
    Partida miPartida (&miEscenario);    
    
    // Defino el reloj de sincronizacion.
    Reloj miReloj(1);
    
    MotorJuegoFactory factory;
    MotorJuego* motorJuego = factory.crear(&miReloj);
    
    motorJuego->correrPartida(&miPartida);
    
    // Corre el tiempo...
    for (int i = 0; i < 5; i++)
        miReloj.correr();
    
    // Verifico que las posiciones de los actores en el escenario se hayan desplazado correctamente.
    if ( 5 != miPartida.ArenaJuego()->getActorPorNombre ("pepe")->getTrayectoria()->getPosicion()->X()  ||
         5 != miPartida.ArenaJuego()->getActorPorNombre ("pepe")->getTrayectoria()->getPosicion()->Y()
       )
        std::cout << "%TEST_FAILED% time=0 testname=test1 (MotorDesplazamientoTest) message=Tras correr 5 ticks pepe no esta en la posicion esperada." << std::endl;
}

void test2() {
    std::cout << "MotorJuegoTest test 2" << std::endl;
    std::cout << "%TEST_FAILED% time=0 testname=test2 (MotorJuegoTest) message=error message sample" << std::endl;
}

int main(int argc, char** argv) {
    std::cout << "%SUITE_STARTING% MotorJuegoTest" << std::endl;
    std::cout << "%SUITE_STARTED%" << std::endl;

    std::cout << "%TEST_STARTED% test1 (MotorJuegoTest)" << std::endl;
    test1();
    std::cout << "%TEST_FINISHED% time=0 test1 (MotorJuegoTest)" << std::endl;
    /*
    std::cout << "%TEST_STARTED% test2 (MotorJuegoTest)\n" << std::endl;
    test2();
    std::cout << "%TEST_FINISHED% time=0 test2 (MotorJuegoTest)" << std::endl;
    */
    std::cout << "%SUITE_FINISHED% time=0" << std::endl;

    return (EXIT_SUCCESS);
}

